/*************************************************************************
 *                                                                       *
 * This file is part of the FreeMAPs distribution.  For full copyright   *
 * information, see COPYRIGHT and COPYING.LESSER.                        *
 *                                                                       *
 * Author:           sqbang                                              *
 * Email:            sqbang@ustc.edu                                     *
 * Date:             2011.03.31                                          *
 *                                                                       *
 *************************************************************************/

#ifndef FreeMAPs_include_COMMON_enum_VariableType_h
#define FreeMAPs_include_COMMON_enum_VariableType_h

#include "FreeMAPsConfig.h"

//C++ headers
#include <string>

namespace FreeMAPs
{

enum class VariableType
{
    SCALAR,     ///< variable with one component
    VECTOR,     ///< variable with dim component
    TENSOR,     ///< variable with dim*dim component
    ARRAY,      ///< variable similar to VECTOR but do not have a size of dim

    INVALID_VALUE
};

namespace Utilities
{

int
get_depth (
    const VariableType& var_type);

/**
 * -scalar: return var_name
 " -vector: return var_name_i
 * -tensor: return var_name_ij
 */
std::string
get_variable_name (
    const VariableType var_type,
    const std::string& var_name,
    const int comp);
}

}

#include "COMMON/enum/VariableType.inl"

#endif
